/***************************************************************************
 * 文件名：RunMethodUtil
 * 功能：
 * 说明：
 * -------------------------------------------------------------------------
 * 创建时间：2025/7/11 17:35:12
 * 创建人：葛浩
 * 邮箱： 2094733071@qq.com
 * =========================================================================
 *
 * 修改人：   
 * 修改时间：   
 * 修改说明：   
 ***************************************************************************/
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;

namespace RunMethodLibrary
{
	public class RunMethodUtil
	{

		/// <summary>
		/// 获取当前exe、dll中所有继承IExecuteProgram接口的类
		/// </summary>
		/// <param name="fileName"></param>
		/// <param name="callClassName">指定调用入口类名称</param>
		/// <returns></returns>
		public static List<IRunMethod4SingleForm> GetExecutes(string fileName,string callClassName = "")
		{
			if (string.IsNullOrEmpty(fileName) || !File.Exists(fileName))
			{
				return null;
			}
			var interfaceType = typeof(IRunMethod4SingleForm);
			var instances = new List<IRunMethod4SingleForm>();

			// 获取当前应用程序域中的所有程序集
			var assembly = Assembly.LoadFrom(fileName);
			if (assembly == null)
			{
				return null;
			}

			foreach (var type in assembly.GetTypes())
			{
				try
				{
					// 检查类型是否是具体的类，并且实现了目标接口
					if (type.IsClass && !type.IsAbstract && interfaceType.IsAssignableFrom(type))
					{
						if (!string.IsNullOrEmpty(callClassName) && !callClassName.Equals(type.Name))
						{
							continue;
						}

						// 创建实例
						var instance = Activator.CreateInstance(type) as IRunMethod4SingleForm;
						if (instance != null)
						{
							instances.Add(instance);
						}
					}
				}
				catch (ReflectionTypeLoadException)
				{
					// 忽略无法加载的程序集
				}
			}
			return instances;
		}

	}
}
